1. Field of the Invention
This invention relates to data error checking and recovery and more particularly relates to data error checking and recovery in a data storage device in a Small Computer System Interface (“SCSI”) End-to-End Checking system.
2. Description of the Related Art
For current data systems, data is typically transmitted in a SCSI environment without any redundancy checking information such as parity. Currently, individual devices have internal error checking. For example, a SCSI bus may have a parity bit added to each byte. The parity is tracked from where data is sent to the target along the bus, but once the data reaches the target device, the parity information is not retained. In recognition of this problem, a new SCSI standard is emerging called the SCSI T10 End-to-End Checking Standard which addresses the problem of errors introduced somewhere in the data stream between a source and a target that may not be detected by individual devices between the source, target, and storage device.
One element of the standard is to include information along with the data in the form of a 2-byte guard, a 2-byte application tag, and a 4-byte reference tag. This allows a redundancy check to be created and stored in the guard. The application tag is used by an application and the reference tag is a logical block address. Since the redundancy check can now be done at the source and transmitted to the target and stored on disk, it can be used to endure data consistency from end to end.
A problem is created, however, in that the standard calls for the redundancy check to be a cyclic redundancy check (“CRC”) using a particular polynomial. This creates a problem for a data storage device, such as a RAID 5 configured device, in that the CRC is not transitive. (RAID is an acronym for Redundant Array of Independent (or Inexpensive) Disks.) The problem is manifest when the RAID 5 data storage device performs a redundancy check on the parity drive, which is done by performing an exclusive OR (“XOR”) operation on a row of data blocks. In this case, even though the data may be valid, the value returned will not match the XOR of the guard and a parity error will be flagged. The same problem occurs if the redundancy check is created using Reed Solomon Codes. The problem exists because the redundancy check chosen for the standard is not a type that is transitive such as a Longitudinal Redundancy Check (“LRC”). A transitive redundancy check type would allow a redundancy check of the parity drive to equal an XOR of the guard.
From the foregoing discussion, it should be apparent that a need exists for an apparatus, system, and method for data error checking and recovery that overcome the redundancy check problem associated with the CRC required by the SCSI End-to-End Checking Standard when storing data. Beneficially, such an apparatus, system, and method would allow data error checking and recovery in a SCSI environment and especially an End-to-End Checking Standard environment.